/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.aspas.persistencia;

import br.com.aspas.modelo.Cursos;
import br.com.aspas.modelo.CursosPessoaFisica;
import br.com.aspas.modelo.Evento;
import br.com.aspas.modelo.PessoaFisica;
import br.com.aspas.util.AbstractDAO;
import java.util.Date;
import java.util.List;
import javax.persistence.Query;

/**
 *
 * @author gimmli
 */
public class CursosPessoaFisicaDao extends AbstractDAO {

    public CursosPessoaFisicaDao() {
    }

    public void inserir(CursosPessoaFisica cursosPessoaFisica) {
        //   cursosPessoaFisica.setDataInclusao(new Date());
        insert(cursosPessoaFisica);
    }

    public CursosPessoaFisica findByPk(Integer pKey) {
        return (CursosPessoaFisica) findByPk(CursosPessoaFisica.class, pKey);
    }

    public void altera(CursosPessoaFisica cursosPessoaFisica) {
        //   cursosPessoaFisica.setDataModificacao(new Date());
        update(cursosPessoaFisica);
    }

    public void removeAllCursosPessoaFisica(PessoaFisica pessoaFisica, Evento evento) {
        StringBuilder builder = new StringBuilder();
        builder.append(" where c.cursosPessoaFisicaPK.evento = " + evento.getCodigo());
        builder.append(" and   c.cursosPessoaFisicaPK.pessoaFisicaCodigo = " + pessoaFisica.getCodigo());
        deleteDinamic("CursosPessoaFisica as c", builder.toString());

    }

    public List<CursosPessoaFisica> findAllCursosPessoaFisica() {
        em = emf.createEntityManager();
        List<CursosPessoaFisica> listCursosPessoaFisica = em.createQuery("SELECT object(c) FROM cursosPessoaFisica as c order by c.cursosPessoaFisicaPK.pessoaFisica.nome desc").getResultList();
        em.close();
        return listCursosPessoaFisica;
    }

    public CursosPessoaFisica findAllCursosPessoaFisicaEvento(Integer pessoaFisica) {
        CursosPessoaFisica cursosPessoaFisica = null;
        em = emf.createEntityManager();
        try {
            cursosPessoaFisica = (CursosPessoaFisica) em.createQuery("SELECT object(c) FROM CursosPessoaFisica as c "
                    + " where c.cursosPessoaFisicaPK.pessoaFisica.codigo=" + pessoaFisica + "").getSingleResult();
        } catch (Exception e) {
            cursosPessoaFisica = null;
        } finally {
            em.close();
        }
        return cursosPessoaFisica;
    }

    public List<CursosPessoaFisica> findAllCursosPessoaFisica(Integer pessoaFisica, Evento evento) {
        em = emf.createEntityManager();
        List<CursosPessoaFisica> listCursosPessoaFisica = em.createQuery("SELECT object(c) FROM CursosPessoaFisica as c "
                + " where c.cursosPessoaFisicaPK.pessoaFisicaCodigo=" + pessoaFisica + " and "
                + " c.cursosPessoaFisicaPK.evento = " + evento.getCodigo()).getResultList();
        em.close();
        return listCursosPessoaFisica;
    }

    public CursosPessoaFisica findAllCursosPessoaFisica(Integer pessoaFisica, Integer curso) {
        CursosPessoaFisica cursosPessoaFisica = null;
        em = emf.createEntityManager();
        try {
            cursosPessoaFisica = (CursosPessoaFisica) em.createQuery("select cp from CursosPessoaFisica as cp "
                    + " where cp.cursosPessoaFisicaPK.cursos.codigo =" + curso + " and cp.cursosPessoaFisicaPK.pessoaFisica.codigo= new Date()" + pessoaFisica).getSingleResult();

        } catch (Exception e) {
            cursosPessoaFisica = null;
        } finally {
            em.close();
        }
        return cursosPessoaFisica;
    }

    public List<CursosPessoaFisica> findAllCursosPessoaFisicaEventoNome(String nomePessoaFisica, Integer evento) {
        em = emf.createEntityManager();
        List<CursosPessoaFisica> listCursosPessoaFisica = em.createQuery("SELECT object(c) FROM CursosPessoaFisica as c "
                + " where c.cursosPessoaFisicaPK.pessoaFisica.nome like'%" + nomePessoaFisica + "%' and c.cursosPessoaFisicaPK.evento.codigo=" + evento + " ").getResultList();
        em.close();
        return listCursosPessoaFisica;

    }

    public List<CursosPessoaFisica> findAllCursoPFData(Date data, Integer pessoaFisica) {
        List<CursosPessoaFisica> listCursosPessoaFisica = null;
        try {
            em = emf.createEntityManager();
            Query query = (Query) em.createQuery("SELECT c FROM CursosPessoaFisica as c "
                    + " where c.cursosPessoaFisicaPK.pessoaFisica.codigo=? and c.cursosPessoaFisicaPK.cursos.dataCurso=? ");
            query.setParameter(1, pessoaFisica);
            query.setParameter(2, data);
            listCursosPessoaFisica = (List<CursosPessoaFisica>) query.getResultList();

        } catch (Exception e) {

            listCursosPessoaFisica = null;
        } finally {

            em.close();

        }
        return listCursosPessoaFisica;
    }

    public Integer qtdPessoaCurso(Integer curso, Date data, Evento evento) {
        Long count = null;
        em = emf.createEntityManager();
        try {
            Query query = em.createQuery("Select count(cp) from CursosPessoaFisica cp"
                    + " where cp.cursosPessoaFisicaPK.cursosCodigo=? and cp.cursosEvento.data=? "
                    + " and cp.cursosPessoaFisicaPK.evento = ?");
            query.setParameter(1, curso);
            query.setParameter(2, data);
            query.setParameter(3, evento.getCodigo());

            count = (Long) query.getSingleResult();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            em.close();
        }
        return new Integer((int) count.longValue());
    }

    public List<CursosPessoaFisica> findAllCursosPessoaFisicaLista(Integer pessoaFisica) {

        List<CursosPessoaFisica> cursosPessoaFisica = null;
        em = emf.createEntityManager();
        try {
            cursosPessoaFisica = (List<CursosPessoaFisica>) em.createQuery("select cp from CursosPessoaFisica as cp "
                    + " where cp.cursosPessoaFisicaPK.pessoaFisica.codigo=" + pessoaFisica).getResultList();

        } catch (Exception e) {
            cursosPessoaFisica = null;
        } finally {
            em.close();
        }
        return cursosPessoaFisica;
    }

    public boolean verificaPessoCurso(PessoaFisica pessoaFisica, Cursos cursos, Evento evento) {
        try {
            em = emf.createEntityManager();
            Query q = em.createQuery(" select p from CursosPessoaFisica p "
                    + " where p.cursosPessoaFisicaPK.cursosCodigo = :curso and"
                    + " p.cursosPessoaFisicaPK.evento = :evento and "
                    + " p.cursosPessoaFisicaPK.pessoaFisicaCodigo = :pessoaFisica ");
            q.setParameter("curso", cursos.getCodigo());
            q.setParameter("evento", evento.getCodigo());
            q.setParameter("pessoaFisica", pessoaFisica.getCodigo());
            if (q.getSingleResult() != null) {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            em.close();
        }
        return false;
    }
}
